from xtquant import xtdata
import time
# 设定一个标的列表
code_list = ["600031.SH",'600111.SH']
# 设定获取数据的周期
period = "1m"
def f(data):
    '''
    释义
    从缓存获取行情数据，是主动获取行情的主要接口
    参数
    field_list - list 数据字段列表，传空则为全部字段
    stock_list - list 合约代码列表
    period - string 周期
    start_time - string 起始时间
    end_time - string 结束时间
    count - int 数据个数
    默认参数，大于等于0时，若指定了start_time，end_time，此时以end_time为基准向前取count条；若start_time，end_time缺省，默认取本地数据最新的count条数据；若start_time，end_time，count都缺省时，默认取本地全部数据
    dividend_type - string 除权方式
    fill_data - bool 是否向后填充空缺数据
    返回
    period为1m 5m 1d等K线周期时
    返回dict { field1 : value1, field2 : value2, ... }
    field1, field2, ... ：数据字段
    value1, value2, ... ：pd.DataFrame 数据集，index为stock_list，columns为time_list
    各字段对应的DataFrame维度相同、索引相同
    period为tick分笔周期时
    返回dict { stock1 : value1, stock2 : value2, ... }
    stock1, stock2, ... ：合约代码
    value1, value2, ... ：np.ndarray 数据集，按数据时间戳time增序排列
    备注
    获取lv2数据时需要数据终端有lv2数据权限
    时间范围为闭区间
    '''
    print(data)
    code_list = list(data.keys())    # 获取到本次触发的标的代码
    kline_in_callabck = xtdata.get_market_data_ex([],code_list,period = '1m')    # 在回调中获取klines数据
    print(kline_in_callabck)
for i in code_list:
    '''
    订阅股票行情数据
    :param stock_code: 股票代码 e.g. "000001.SZ"
    :param start_time: 开始时间，格式YYYYMMDD/YYYYMMDDhhmmss/YYYYMMDDhhmmss.milli，e.g."20200427" "20200427093000" "20200427093000.000"
        若取某日全量历史数据，时间需要具体到秒，e.g."20200427093000"
    :param end_time: 结束时间 同“开始时间”
    :param count: 数量 -1全部/n: 从结束时间向前数n个
    :param period: 周期 分笔"tick" 分钟线"1m"/"5m" 日线"1d"
    :param callback:
        订阅回调函数onSubscribe(datas)
        :param datas: {stock : [data1, data2, ...]} 数据字典
    :return: int 订阅序号
    '''
    xtdata.subscribe_quote(i,period=period,count=-1,callback=f) # 订阅时设定回调函数
# 使用回调时，必须要同时使用xtdata.run()来阻塞程序，否则程序运行到最后一行就直接结束退出了。
xtdata.run()



